package com.hulytu.invasion.plugin;

import android.app.Application;

import java.util.Map;

public interface EnhancePlugin<T> {

    /**
     * 插件名
     *
     * @return
     */
    String pluginName();

    /**
     * 插件版本号
     *
     * @return
     */
    int pluginVersion();

    /**
     * 插件是否兼容当前版本
     *
     * @return
     */
    boolean isCompatible();

    /**
     * Application 初始化
     *
     * @param application
     */
    void onAppInit(Application application);

    /**
     * 配置
     *
     * @param configs
     */
    void setConfigs(Map<String, ?> configs);


    Map<String, ?> getConfigs();

    /**
     * 初始化
     *
     * @param host
     */
    void init(T host);

    /**
     * 获取宿主
     *
     * @return
     */
    T getHost();

    /**
     * 调用插件中的方法
     *
     * @param method 方法签名
     * @param args   参数
     * @return
     */
    Object invoke(String method, Object... args);

    /**
     *
     * @param param
     */
    void invoke(MethodParam param);
}
